const express = require('express');
const CouponImportController = require('../controllers/CouponImportController');
const logger = require('../utils/logger');

const router = express.Router();
const controller = new CouponImportController();

// 应用中间件
router.use(CouponImportController.logRequest);
router.use(CouponImportController.requireAdminAuth);

/**
 * 优惠券模板和导出相关路由
 */

// 下载优惠券导入模板
// GET /admin/template/coupon.xlsx
router.get('/template/coupon.xlsx', async (req, res) => {
  try {
    await controller.downloadTemplate(req, res);
  } catch (error) {
    logger.error('模板下载路由错误:', error);
    res.status(500).json({
      success: false,
      message: '模板下载失败',
      error: error.message
    });
  }
});

// 导出优惠券数据
// GET /admin/export/coupon
// 查询参数：status, discount_type, validity_type, created_from, created_to, valid_from, valid_to, title, orderBy, orderDirection, limit, offset
router.get('/export/coupon', async (req, res) => {
  try {
    await controller.exportCoupons(req, res);
  } catch (error) {
    logger.error('优惠券导出路由错误:', error);
    res.status(500).json({
      success: false,
      message: '数据导出失败',
      error: error.message
    });
  }
});

// 导出优惠券统计报告
// GET /admin/export/coupon/statistics
router.get('/export/coupon/statistics', async (req, res) => {
  try {
    await controller.exportStatistics(req, res);
  } catch (error) {
    logger.error('统计报告导出路由错误:', error);
    res.status(500).json({
      success: false,
      message: '统计报告生成失败',
      error: error.message
    });
  }
});

/**
 * 优惠券导入相关路由
 */

// 优惠券导入校验
// POST /admin/import/coupon
// 请求体：multipart/form-data，包含file字段（Excel文件）
// 响应：校验结果，包含错误列表和有效数据
router.post('/import/coupon', async (req, res) => {
  try {
    await controller.importCoupons(req, res);
  } catch (error) {
    logger.error('优惠券导入校验路由错误:', error);
    res.status(500).json({
      success: false,
      message: '导入校验失败',
      error: error.message
    });
  }
});

// 执行优惠券导入
// POST /admin/import/coupon/execute
// 请求体：JSON，包含validData字段（校验通过的数据数组）
// 响应：导入结果统计
router.post('/import/coupon/execute', async (req, res) => {
  try {
    await controller.executeImport(req, res);
  } catch (error) {
    logger.error('优惠券导入执行路由错误:', error);
    res.status(500).json({
      success: false,
      message: '执行导入失败',
      error: error.message
    });
  }
});

// 生成错误报告CSV
// POST /admin/import/coupon/errors
// 请求体：JSON，包含errors字段（错误数据数组）
// 响应：CSV文件下载
router.post('/import/coupon/errors', async (req, res) => {
  try {
    await controller.generateErrorReport(req, res);
  } catch (error) {
    logger.error('错误报告生成路由错误:', error);
    res.status(500).json({
      success: false,
      message: '生成错误报告失败',
      error: error.message
    });
  }
});

// 应用错误处理中间件
router.use(CouponImportController.handleError);

// 路由信息日志
console.log('优惠券导入导出路由已加载', {
  routes: [
    'GET /admin/template/coupon.xlsx - 下载导入模板',
    'GET /admin/export/coupon - 导出优惠券数据',
    'GET /admin/export/coupon/statistics - 导出统计报告',
    'POST /admin/import/coupon - 导入校验',
    'POST /admin/import/coupon/execute - 执行导入',
    'POST /admin/import/coupon/errors - 生成错误报告'
  ]
});

module.exports = router;